<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>

<body>


    <script>
        // apply
        // 声明一个变量,用于记录say方法作用域的 this
        var that;
        // m 对象
        var m = {
            color: "yellow",
            say: function (width, height) {// 作用域
                console.log("颜色: " + this.color + ";宽度:" + width + ";高度:" + height);
                that = this;// 记录当前作用域的this
            }
        }
        // m.say();
        // console.log(that === m);//true


        // n 对象
        var n = {
            color: "blue"
        }

        // 改变this之前
        // n.say();// 报错
        // console.log(that === n);//false

        // 改变this之后
        m.say.apply(n, ["100px", "120px"]);//参数1:目标对象  参数2: 数组
        console.log(that === n); // true

        // apply
        // 调用者: 方法/函数
        // 参数: 1:目标对象  2: 数组(和方法的形参一一对应)
        // 返回值: 忽略
        // 功能: 改变原对象方法作用域中this指向(用n对象替换了m对象)
    </script>
</body>

</html>